/**
 * @Author Fizz Pu
 * @Date 2020/9/27 下午8:59
 * @Version 1.0
 * 失之毫厘，缪之千里！
 */

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * 给你一个整数 n，请你返回 任意 一个由 n
 * 个 各不相同 的整数组成的数组，并且这 n 个数相加和为 0 。
 */
public class Lee1304 {
    //
    public static void main(String[] args) {
        System.out.println(Arrays.toString(sumZero(0)));
        System.out.println(Arrays.toString(sumZero(-5)));
        System.out.println(Arrays.toString(sumZero(5)));
        System.out.println(Arrays.toString(sumZero(3)));
        System.out.println(Arrays.toString(sumZero(1)));
    }


    public static int[] sumZero(int n) {
        /*int val = n;
        List<Integer> res = new LinkedList<>();
        if(n  % 2 != 0){
            res.add(0);
        }
        for(int i = 0; i < n/2; ++i){
            res.add(val);
            res.add(-1*val);
            val--;
        }

        // 转成int数组
        int[] arr = new int[res.size()];
        for(int j = 0 ; j < res.size(); ++j){
            arr[j] = res.get(j);
        }
        return n > 0 ? arr : null;*/

        // 优化 双指针 o(n/2)
        if(n <= 0)return null;
        int[] res = new int[n];
        int i = 0, j = n-1, val = n;
        while (i < j){
            res[i++] = val;
            res[j--] = -1 * val;
            val--;
        }
        return res;
    }
}
